﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ProjControleModelos;
namespace ProjControleDAL
{
   public class CompraDAL
    {
       SqlCommand cmd = null;
       Dados objDados = null;
       public CompraDAL()
        {
        }
        #region Métodos
       public void inserir(Compra objC)
       {
           try
           {
               cmd = new SqlCommand();
               objDados = new Dados();
               cmd.CommandText = "insert into compra values(@dt_compra,@cod_fornecedor," +
                   "@num_nota,@val_frete,@val_compra,@num_pedido)";
               cmd.Parameters.Add(new SqlParameter("@dt_compra", SqlDbType.DateTime)).Value = objC.dt_compra;
               cmd.Parameters.Add(new SqlParameter("@cod_fornecedor", SqlDbType.Int)).Value = objC.cod_fornecedor;
               if (objC.num_nota_fiscal.HasValue)
                   cmd.Parameters.Add(new SqlParameter("@num_nota", SqlDbType.Int)).Value = objC.num_nota_fiscal;
               else
                   cmd.Parameters.Add(new SqlParameter("@num_nota", SqlDbType.Int)).Value = DBNull.Value;
               if (objC.val_frete.HasValue)
                   cmd.Parameters.Add(new SqlParameter("@val_frete", SqlDbType.Decimal)).Value = objC.val_frete;
               else
                   cmd.Parameters.Add(new SqlParameter("@val_frete", SqlDbType.Decimal)).Value = DBNull.Value;
               cmd.Parameters.Add(new SqlParameter("@val_compra", SqlDbType.Decimal)).Value = objC.val_compra;
               cmd.Parameters.Add(new SqlParameter("@num_pedido", SqlDbType.Int)).Value = objC.num_pedido;
               objC.cod_compra = objDados.executaComandoAI(cmd, "compra");
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objDados = null;
       }
       public void alterar(Compra objC)
       {
           try
           {
               cmd = new SqlCommand();
               objDados = new Dados();
               cmd.CommandText = "update compra set data_compra = @dt_compra,cod_fornecedor = @cod_fornecedor," + 
                   "num_nota_fiscal = @num_nota,valor_frete = @val_frete,valor_compra = @val_compra,num_pedido = @num_pedido " + 
                   "where cod_compra = @cod_compra";
               cmd.Parameters.Add(new SqlParameter("@dt_compra", SqlDbType.DateTime)).Value = objC.dt_compra;
               cmd.Parameters.Add(new SqlParameter("@cod_fornecedor", SqlDbType.Int)).Value = objC.cod_fornecedor;
               if (objC.num_nota_fiscal.HasValue)
                   cmd.Parameters.Add(new SqlParameter("@num_nota", SqlDbType.Int)).Value = objC.num_nota_fiscal;
               else
                   cmd.Parameters.Add(new SqlParameter("@num_nota", SqlDbType.Int)).Value = DBNull.Value;
               if (objC.val_frete.HasValue)
                   cmd.Parameters.Add(new SqlParameter("@val_frete", SqlDbType.Decimal)).Value = objC.val_frete;
               else
                   cmd.Parameters.Add(new SqlParameter("@val_frete", SqlDbType.Decimal)).Value = DBNull.Value;
               cmd.Parameters.Add(new SqlParameter("@val_compra", SqlDbType.Decimal)).Value = objC.val_compra;
               cmd.Parameters.Add(new SqlParameter("@num_pedido", SqlDbType.Int)).Value = objC.num_pedido;
               cmd.Parameters.Add(new SqlParameter("@cod_compra", SqlDbType.Int)).Value = objC.cod_compra;
               objDados.executaComando(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objDados = null;
       }
       public void excluir(Compra objC)
       {
           try
           {
               cmd = new SqlCommand();
               objDados = new Dados();
               cmd.CommandText = "delete from compra where cod_compra = @cod_compra";
               cmd.Parameters.Add(new SqlParameter("@cod_compra", SqlDbType.Int)).Value = objC.cod_compra;
               objDados.executaComando(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objDados = null;
       }
       public DataTable localizar(String fornecedor)
       {
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objDados = new Dados();
               cmd.CommandText = "select c.cod_compra,f.descricao_fornecedor,c.data_compra,c.valor_compra from compra c, fornecedores f " +
                                 "where c.cod_fornecedor = f.cod_fornecedor and f.descricao_fornecedor like @fornecedor";
               cmd.Parameters.Add(new SqlParameter("@fornecedor", SqlDbType.VarChar)).Value = "%" + fornecedor + "%";
               tab = objDados.executaConsulta(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objDados = null;
           return tab;
       }
       public Compra localizar(int codigo)
       {
           Compra objC = null;
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objDados = new Dados();
               cmd.CommandText = "select * from compra where cod_compra = @cod_compra";
               cmd.Parameters.Add(new SqlParameter("@cod_compra", SqlDbType.Int)).Value = codigo;
               tab = objDados.executaConsulta(cmd);
               if (tab != null)
                   if (tab.Rows.Count == 1)
                   {
                       int? cod;//verificar se o retorno é null
                       Double? val_frete;
                       if (tab.Rows[0]["num_nota_fiscal"] is DBNull)
                           cod = null;
                       else
                           cod = int.Parse(tab.Rows[0]["num_nota_fiscal"].ToString());
                       if (tab.Rows[0]["valor_frete"] is DBNull)
                           val_frete = null;
                       else
                           val_frete = Double.Parse(tab.Rows[0]["valor_frete"].ToString());
                                  
                       objC = new Compra(codigo, DateTime.Parse(tab.Rows[0]["data_compra"].ToString()),
                            int.Parse(tab.Rows[0]["cod_fornecedor"].ToString()),
                           cod,
                           Double.Parse(tab.Rows[0]["valor_compra"].ToString()),
                           val_frete,
                           int.Parse(tab.Rows[0]["num_pedido"].ToString()));
                   }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objDados = null;
           return objC;
       }
        #endregion
    }
}
